{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Modeling and Simulation in Python\n",
    "\n",
    "Chapter 25\n",
    "\n",
    "Copyright 2017 Allen Downey\n",
    "\n",
    "License: [Creative Commons Attribution 4.0 International](https://creativecommons.org/licenses/by/4.0)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Configure Jupyter so figures appear in the notebook\n",
    "%matplotlib inline\n",
    "\n",
    "# Configure Jupyter to display the assigned value after an assignment\n",
    "%config InteractiveShell.ast_node_interactivity='last_expr_or_assign'\n",
    "\n",
    "# import functions from the modsim.py module\n",
    "from modsim import *"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Teapots and Turntables"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Tables in Chinese restaurants often have a rotating tray or turntable that makes it easy for customers to share dishes.  These turntables are supported by low-friction bearings that allow them to turn easily and glide.  However, they can be heavy, especially when they are loaded with food, so they have a high moment of inertia.\n",
    "\n",
    "Suppose I am sitting at a table with a pot of tea on the turntable directly in front of me, and the person sitting directly opposite asks me to pass the tea.  I push on the edge of the turntable with 1 Newton of force until it has turned 0.5 radians, then let go.  The turntable glides until it comes to a stop 1.5 radians from the starting position.  How much force should I apply for a second push so the teapot glides to a stop directly opposite me?\n",
    "\n",
    "The following figure shows the scenario, where `F` is the force I apply to the turntable at the perimeter, perpendicular to the moment arm, `r`, and `tau` is the resulting torque.  The blue circle near the bottom is the teapot.\n",
    "\n",
    "![](diagrams/teapot.png)\n",
    "\n",
    "We'll answer this question in these steps:\n",
    "\n",
    "1.  We'll use the results from the first push to estimate the coefficient of friction for the turntable.\n",
    "\n",
    "2.  We'll use that coefficient of friction to estimate the force needed to rotate the turntable through the remaining angle.\n",
    "\n",
    "Our simulation will use the following parameters:\n",
    "\n",
    "1.  The radius of the turntable is 0.5 meters, and its weight is 7 kg.\n",
    "\n",
    "2.  The teapot weights 0.3 kg, and it sits 0.4 meters from the center of the turntable.\n",
    "\n",
    "As usual, I'll get units from Pint."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "newton"
      ],
      "text/latex": [
       "$\\mathrm{newton}$"
      ],
      "text/plain": [
       "<Unit('newton')>"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "radian = UNITS.radian\n",
    "m = UNITS.meter\n",
    "s = UNITS.second\n",
    "kg = UNITS.kilogram\n",
    "N = UNITS.newton"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "And store the parameters in a `Params` object."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>values</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>radius_disk</th>\n",
       "      <td>0.5 meter</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mass_disk</th>\n",
       "      <td>7 kilogram</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>radius_pot</th>\n",
       "      <td>0.4 meter</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mass_pot</th>\n",
       "      <td>0.3 kilogram</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>force</th>\n",
       "      <td>1 newton</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>torque_friction</th>\n",
       "      <td>0.2 meter * newton</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>theta_end</th>\n",
       "      <td>0.5 radian</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>t_end</th>\n",
       "      <td>20 second</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "radius_disk                 0.5 meter\n",
       "mass_disk                  7 kilogram\n",
       "radius_pot                  0.4 meter\n",
       "mass_pot                 0.3 kilogram\n",
       "force                        1 newton\n",
       "torque_friction    0.2 meter * newton\n",
       "theta_end                  0.5 radian\n",
       "t_end                       20 second\n",
       "dtype: object"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "params = Params(radius_disk=0.5*m,\n",
    "                mass_disk=7*kg,\n",
    "                radius_pot=0.4*m,\n",
    "                mass_pot=0.3*kg,\n",
    "                force=1*N,\n",
    "                torque_friction=0.2*N*m,\n",
    "                theta_end=0.5*radian,\n",
    "                t_end=20*s)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "`make_system` creates the initial state, `init`, and computes the total moment of inertia for the turntable and the teapot."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "def make_system(params):\n",
    "    \"\"\"Make a system object.\n",
    "    \n",
    "    params: Params object\n",
    "    \n",
    "    returns: System object\n",
    "    \"\"\"\n",
    "    mass_disk, mass_pot = params.mass_disk, params.mass_pot\n",
    "    radius_disk, radius_pot = params.radius_disk, params.radius_pot\n",
    "    \n",
    "    init = State(theta=0*radian, omega=0*radian/s)\n",
    "    \n",
    "    I_disk = mass_disk * radius_disk**2 / 2\n",
    "    I_pot = mass_pot * radius_pot**2\n",
    "    \n",
    "    return System(params, init=init, I=I_disk+I_pot)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Here's the `System` object we'll use for the first phase of the simulation, while I am pushing the turntable."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>values</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>radius_disk</th>\n",
       "      <td>0.5 meter</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mass_disk</th>\n",
       "      <td>7 kilogram</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>radius_pot</th>\n",
       "      <td>0.4 meter</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mass_pot</th>\n",
       "      <td>0.3 kilogram</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>force</th>\n",
       "      <td>1 newton</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>torque_friction</th>\n",
       "      <td>0.2 meter * newton</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>theta_end</th>\n",
       "      <td>0.5 radian</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>t_end</th>\n",
       "      <td>20 second</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>init</th>\n",
       "      <td>theta               0 radian\n",
       "omega    0.0 radi...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>0.923 kilogram * meter ** 2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "radius_disk                                                0.5 meter\n",
       "mass_disk                                                 7 kilogram\n",
       "radius_pot                                                 0.4 meter\n",
       "mass_pot                                                0.3 kilogram\n",
       "force                                                       1 newton\n",
       "torque_friction                                   0.2 meter * newton\n",
       "theta_end                                                 0.5 radian\n",
       "t_end                                                      20 second\n",
       "init               theta               0 radian\n",
       "omega    0.0 radi...\n",
       "I                                        0.923 kilogram * meter ** 2\n",
       "dtype: object"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "system1 = make_system(params)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Simulation\n",
    "\n",
    "When I stop pushing on the turntable, the angular acceleration changes abruptly.  We could implement the slope function with an `if` statement that checks the value of `theta` and sets `force` accordingly.  And for a coarse model like this one, that might be fine.  But we will get more accurate results if we simulate the system in two phases:\n",
    "\n",
    "1.  During the first phase, force is constant, and we run until `theta` is 0.5 radians.\n",
    "\n",
    "2.  During the second phase, force is 0, and we run until `omega` is 0.\n",
    "\n",
    "Then we can combine the results of the two phases into a single `TimeFrame`.\n",
    "\n",
    "Here's the slope function we'll use:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "def slope_func(state, t, system):\n",
    "    \"\"\"Computes the derivatives of the state variables.\n",
    "    \n",
    "    state: State object\n",
    "    t: time\n",
    "    system: System object \n",
    "    \n",
    "    returns: sequence of derivatives\n",
    "    \"\"\"\n",
    "    theta, omega = state\n",
    "    radius_disk, force = system.radius_disk, system.force\n",
    "    torque_friction, I = system.torque_friction, system.I\n",
    "    \n",
    "    torque = radius_disk * force - torque_friction\n",
    "    alpha = torque / I\n",
    "    \n",
    "    return omega, alpha "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "As always, we'll test the slope function before running the simulation."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(0.0 <Unit('radian / second')>,\n",
       " 0.32502708559046584 <Unit('newton / kilogram / meter')>)"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "slope_func(system1.init, 0, system1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Here's an event function that stops the simulation when `theta` reaches `theta_end`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "def event_func1(state, t, system):\n",
    "    \"\"\"Stops when theta reaches theta_end.\n",
    "    \n",
    "    state: State object\n",
    "    t: time\n",
    "    system: System object \n",
    "    \n",
    "    returns: difference from target\n",
    "    \"\"\"\n",
    "    theta, omega = state\n",
    "    return theta - system.theta_end "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "-0.5 radian"
      ],
      "text/latex": [
       "$-0.5\\ \\mathrm{radian}$"
      ],
      "text/plain": [
       "-0.5 <Unit('radian')>"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "event_func1(system1.init, 0, system1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now we can run the first phase."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>values</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>success</th>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>message</th>\n",
       "      <td>A termination event occurred.</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "success                             True\n",
       "message    A termination event occurred.\n",
       "dtype: object"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "results1, details1 = run_ode_solver(system1, slope_func, events=event_func1)\n",
    "details1"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "And look at the results."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>theta</th>\n",
       "      <th>omega</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1.000000</th>\n",
       "      <td>0.16251354279523292 radian</td>\n",
       "      <td>0.32502708559046584 radian / second</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1.200000</th>\n",
       "      <td>0.2340195016251354 radian</td>\n",
       "      <td>0.390032502708559 radian / second</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1.400000</th>\n",
       "      <td>0.31852654387865653 radian</td>\n",
       "      <td>0.45503791982665215 radian / second</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1.600000</th>\n",
       "      <td>0.41603466955579627 radian</td>\n",
       "      <td>0.5200433369447454 radian / second</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1.751961</th>\n",
       "      <td>0.5 radian</td>\n",
       "      <td>0.569434707794277 radian / second</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                               theta                                omega\n",
       "1.000000  0.16251354279523292 radian  0.32502708559046584 radian / second\n",
       "1.200000   0.2340195016251354 radian    0.390032502708559 radian / second\n",
       "1.400000  0.31852654387865653 radian  0.45503791982665215 radian / second\n",
       "1.600000  0.41603466955579627 radian   0.5200433369447454 radian / second\n",
       "1.751961                  0.5 radian    0.569434707794277 radian / second"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "results1.tail()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Phase 2\n",
    "\n",
    "Before we run the second phase, we have to extract the final time and state of the first phase."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "1.7519607843137255 second"
      ],
      "text/latex": [
       "$1.7519607843137255\\ \\mathrm{second}$"
      ],
      "text/plain": [
       "1.7519607843137255 <Unit('second')>"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "t_0 = results1.last_label() * s"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "And make an initial `State` object for Phase 2."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>values</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>theta</th>\n",
       "      <td>0.5 radian</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>omega</th>\n",
       "      <td>0.569434707794277 radian / second</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "theta                           0.5 radian\n",
       "omega    0.569434707794277 radian / second\n",
       "Name: 1.7519607843137255, dtype: object"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "init2 = results1.last_row()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "And a new `System` object with zero force."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>values</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>radius_disk</th>\n",
       "      <td>0.5 meter</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mass_disk</th>\n",
       "      <td>7 kilogram</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>radius_pot</th>\n",
       "      <td>0.4 meter</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mass_pot</th>\n",
       "      <td>0.3 kilogram</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>force</th>\n",
       "      <td>0 newton</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>torque_friction</th>\n",
       "      <td>0.2 meter * newton</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>theta_end</th>\n",
       "      <td>0.5 radian</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>t_end</th>\n",
       "      <td>20 second</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>init</th>\n",
       "      <td>theta                           0.5 radian\n",
       "ome...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>0.923 kilogram * meter ** 2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>t_0</th>\n",
       "      <td>1.7519607843137255 second</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "radius_disk                                                0.5 meter\n",
       "mass_disk                                                 7 kilogram\n",
       "radius_pot                                                 0.4 meter\n",
       "mass_pot                                                0.3 kilogram\n",
       "force                                                       0 newton\n",
       "torque_friction                                   0.2 meter * newton\n",
       "theta_end                                                 0.5 radian\n",
       "t_end                                                      20 second\n",
       "init               theta                           0.5 radian\n",
       "ome...\n",
       "I                                        0.923 kilogram * meter ** 2\n",
       "t_0                                        1.7519607843137255 second\n",
       "dtype: object"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "system2 = System(system1, t_0=t_0, init=init2, force=0*N)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Here's an event function that stops when angular velocity is 0."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "def event_func2(state, t, system):\n",
    "    \"\"\"Stops when omega is 0.\n",
    "    \n",
    "    state: State object\n",
    "    t: time\n",
    "    system: System object \n",
    "    \n",
    "    returns: omega\n",
    "    \"\"\"\n",
    "    theta, omega = state\n",
    "    return omega"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "0.569434707794277 radian/second"
      ],
      "text/latex": [
       "$0.569434707794277\\ \\frac{\\mathrm{radian}}{\\mathrm{second}}$"
      ],
      "text/plain": [
       "0.569434707794277 <Unit('radian / second')>"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "event_func2(system2.init, 0, system2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now we can run the second phase."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(0.569434707794277 <Unit('radian / second')>,\n",
       " -0.21668472372697725 <Unit('newton / kilogram / meter')>)"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "slope_func(system2.init, system2.t_0, system2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>values</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>success</th>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>message</th>\n",
       "      <td>A termination event occurred.</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "success                             True\n",
       "message    A termination event occurred.\n",
       "dtype: object"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "results2, details2 = run_ode_solver(system2, slope_func, events=event_func2)\n",
    "details2"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "And check the results."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>theta</th>\n",
       "      <th>omega</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>3.751961</th>\n",
       "      <td>1.2054999681345993 radian</td>\n",
       "      <td>0.13606526034032235 radian / second</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3.951961</th>\n",
       "      <td>1.2283793257281241 radian</td>\n",
       "      <td>0.09272831559492689 radian / second</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4.151961</th>\n",
       "      <td>1.2425912943725699 radian</td>\n",
       "      <td>0.049391370849531435 radian / second</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4.351961</th>\n",
       "      <td>1.2481358740679367 radian</td>\n",
       "      <td>0.006054426104135979 radian / second</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4.379902</th>\n",
       "      <td>1.247699599245727 radian</td>\n",
       "      <td>0.0 radian / second</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                              theta                                 omega\n",
       "3.751961  1.2054999681345993 radian   0.13606526034032235 radian / second\n",
       "3.951961  1.2283793257281241 radian   0.09272831559492689 radian / second\n",
       "4.151961  1.2425912943725699 radian  0.049391370849531435 radian / second\n",
       "4.351961  1.2481358740679367 radian  0.006054426104135979 radian / second\n",
       "4.379902   1.247699599245727 radian                   0.0 radian / second"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "results2.tail()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Pandas provides `combine_first`, which combines `results1` and `results2`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>theta</th>\n",
       "      <th>omega</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>3.751961</th>\n",
       "      <td>1.2054999681345993 radian</td>\n",
       "      <td>0.13606526034032235 radian / second</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3.951961</th>\n",
       "      <td>1.2283793257281241 radian</td>\n",
       "      <td>0.09272831559492689 radian / second</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4.151961</th>\n",
       "      <td>1.2425912943725699 radian</td>\n",
       "      <td>0.049391370849531435 radian / second</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4.351961</th>\n",
       "      <td>1.2481358740679367 radian</td>\n",
       "      <td>0.006054426104135979 radian / second</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4.379902</th>\n",
       "      <td>1.247699599245727 radian</td>\n",
       "      <td>0.0 radian / second</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                              theta                                 omega\n",
       "3.751961  1.2054999681345993 radian   0.13606526034032235 radian / second\n",
       "3.951961  1.2283793257281241 radian   0.09272831559492689 radian / second\n",
       "4.151961  1.2425912943725699 radian  0.049391370849531435 radian / second\n",
       "4.351961  1.2481358740679367 radian  0.006054426104135979 radian / second\n",
       "4.379902   1.247699599245727 radian                   0.0 radian / second"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "results = results1.combine_first(results2)\n",
    "results.tail()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now we can plot `theta` for both phases."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "def plot_theta(results):\n",
    "    plot(results.theta, label='theta')\n",
    "    decorate(xlabel='Time (s)',\n",
    "             ylabel='Angle (rad)')\n",
    "    \n",
    "plot_theta(results)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "And `omega`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAAEYCAYAAAAJeGK1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nOzdd3xUVf7/8dedmUx6DymACFgOgoqKiIggAgqCKBakWVZd17auy+7+1i5B1LWsLl93F7GsnWpBUUCxgNjFBgpyREERSe99ZjLz++MOGGIIF8jMnSSf5+ORhzN37tz7DkI+OXfO/RwjEAgghBBCRBqH3QGEEEKIlkiBEkIIEZGkQAkhhIhIUqCEEEJEJJfdAdqaUioaGAjkAY02xxFCCNE6J5ADrNVaNzR9ocMVKMzi9J7dIYQQQuyTocD7TTd0xAKVBzBv3jyys7PtziKEEKIV+fn5TJs2DYI/u5vqiAWqESA7O5vu3bvbnUUIIYQ1v/lIRiZJCCGEiEhSoIQQQkQkKVBCCCEikhQoIYQQEUkKlBBCiIgkBUoIIUREkgIlxF4EfF48JTvsjiFEpyMFSohWBPyN5M2fyfa511H+0ct2xxGiU5ECJUQrKj9/g/qfvwWg9J1nqVi73OZEQnQeUqCE2ANfRRGlq+YBkHDUKQCUrPwflV++ZWcsIToNKVBCtCAQCFC04hEC3nri+5xI5ll/Iv20SwEoXj6Xqm/W2JxQiI5PCpQQLajZ8D51P3yJIyae9NG/ByD5hDNJHT4NCFC09N9Ub/rI3pBCdHBSoIRoprG2kuI3nwAgbeTFuBJSd72WOuRcUk4+HwJ+Cpf8i5rNn9kVU3RyH374Ieeddx7HHXcc48eP5/XXXwdgxIgRPP3004wePZpjjjmGG264gU8//ZRx48Zx7LHH8te//pXGRrMva0VFBTfddBNDhgzhlFNO4cEHH8Tn8wHg9Xq54447GDhwIKNGjeKxxx5DKbXr/PPnz2f8+PEMGDCAwYMHc//997f599gRu5kLcUBK3nwSf20lMT2PIrH/yN+8njpsMgGvh4pPllLw4v1kX3Azcb3725BUhFrewruo++GLsJwr9pDjyJl8i6V9N2/ezJVXXsm9997L6aefztq1a7nmmmvo0qULAC+88AILFiygrq6OsWPHsnnzZp5++mkaGho455xzePfddxkxYgQ33HADbrebN954g9raWv70pz/xyCOPcO211zJnzhy++uorli1bhtPp5Jprrtl1/i+++ILZs2ezYMECDjnkENavX8/UqVMZPXo0Rx99dJv9mcgISogman/4kupv1mC43HQ540oMw/jNPoZhkDbyYpIGjIFGHwXP30Pdtg02pBWd1bJlyxg0aBBjx47F5XIxePBgxo8fz5IlSwC4+OKLSUtLo1u3bvTo0YOzzjqLjIwMunXrxmGHHcb27dspLi5m1apV3H777SQkJJCZmcm1117LwoULAVi6dClXXnklmZmZpKenc9111+06/xFHHMHLL7/MIYccQllZGfX19cTHx1NYWNim36eMoIQI8nvqKF4+F4DUYZOISsvZ476GYZA++nICPi9V694mf9Hd5EydQUy3w8MVV4SB1RFNuJWWltK1a9fdtnXv3p1PPvkEgJSUlF3bHQ4HSUlJuz33+/3s2GHefD5mzJhdrwUCAbxeLw0NDRQUFOy26GtOzq//HpxOJ4888ghvvPEGqamp9O3bF7/f37bfJFKghNildPUCfJXFuLN7kzxo/F73NwwHGWOvJODzUL3hPfIXzCJn2kyic3qHIa3ozHJycvjss90///z555/JyMhg69atLY78m8vMzMThcPDee+8RGxsLQHV1NSUlJURHR5OTk0NeXh79+5uXrwsKCna998knn2Tjxo2sXLmSpKQkAoEAAwcObMPv0CSX+IQA6n/5jsq1y8Fw0GXc1RgOp6X3GQ4nXc66jjg1CH9DLXkL7sBTuC3EaUVnN3bsWD777DOWL19OY2MjH330Ea+++irjx+/9F6udsrOzOeGEE7jnnnuoqamhurqam266iVtvvRWAc889l0cffZSioiLKysqYM2fOrvdWVVURFRWFy+Wirq6OBx98kKqqKjweT5t+n1KgRKcXaPRStGwOECD5xLOIzt63EZDhcJJ1znTiDh2Av66KvPkzpXefCKmDDz6YOXPm8Pjjj3P88cczc+ZMZs6cycknn7xPx3nggQeorq7mtNNOY8SIERiGwezZswG4/PLL6du3L6NHj2bixIn069ePqKgoAC677DJiY2MZMmQIo0aNori4mCFDhrB58+Y2/T6NQCDQpge0m1KqJ7D17bffpnv37nbHEe1A2XuLKVuzCFdqNt2veBBHVPR+Hcfv81Cw+B/U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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "def plot_omega(results):\n",
    "    plot(results.omega, label='omega', color='C1')\n",
    "    decorate(xlabel='Time (s)',\n",
    "             ylabel='Angular velocity (rad/s)')\n",
    "    \n",
    "plot_omega(results)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Saving figure to file figs/chap25-fig01.pdf\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x576 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "subplot(2, 1, 1)\n",
    "plot_theta(results)\n",
    "subplot(2, 1, 2)\n",
    "plot_omega(results)\n",
    "savefig('figs/chap25-fig01.pdf')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Estimating friction\n",
    "\n",
    "Let's take the code from the previous section and wrap it in a function."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "def run_two_phases(force, torque_friction, params):\n",
    "    \"\"\"Run both phases.\n",
    "    \n",
    "    force: force applied to the turntable\n",
    "    torque_friction: friction due to torque\n",
    "    params: Params object\n",
    "    \n",
    "    returns: TimeFrame of simulation results\n",
    "    \"\"\"\n",
    "    # put the specified parameters into the Params object\n",
    "    params = Params(params, force=force, torque_friction=torque_friction)\n",
    "\n",
    "    # run phase 1\n",
    "    system1 = make_system(params)\n",
    "    results1, details1 = run_ode_solver(system1, slope_func, \n",
    "                                          events=event_func1)\n",
    "\n",
    "    # get the final state from phase 1\n",
    "    t_0 = results1.last_label() * s\n",
    "    init2 = results1.last_row()\n",
    "    \n",
    "    # run phase 2\n",
    "    system2 = System(system1, t_0=t_0, init=init2, force=0*N)\n",
    "    results2, details2 = run_ode_solver(system2, slope_func, \n",
    "                                        events=event_func2)\n",
    "    \n",
    "    # combine and return the results\n",
    "    results = results1.combine_first(results2)\n",
    "    return TimeFrame(results)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's test it with the same parameters."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>theta</th>\n",
       "      <th>omega</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>3.751961</th>\n",
       "      <td>1.2054999681345993 radian</td>\n",
       "      <td>0.13606526034032235 radian / second</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3.951961</th>\n",
       "      <td>1.2283793257281241 radian</td>\n",
       "      <td>0.09272831559492689 radian / second</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4.151961</th>\n",
       "      <td>1.2425912943725699 radian</td>\n",
       "      <td>0.049391370849531435 radian / second</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4.351961</th>\n",
       "      <td>1.2481358740679367 radian</td>\n",
       "      <td>0.006054426104135979 radian / second</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4.379902</th>\n",
       "      <td>1.247699599245727 radian</td>\n",
       "      <td>0.0 radian / second</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                              theta                                 omega\n",
       "3.751961  1.2054999681345993 radian   0.13606526034032235 radian / second\n",
       "3.951961  1.2283793257281241 radian   0.09272831559492689 radian / second\n",
       "4.151961  1.2425912943725699 radian  0.049391370849531435 radian / second\n",
       "4.351961  1.2481358740679367 radian  0.006054426104135979 radian / second\n",
       "4.379902   1.247699599245727 radian                   0.0 radian / second"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "force = 1*N\n",
    "torque_friction = 0.2*N*m\n",
    "results = run_two_phases(force, torque_friction, params)\n",
    "results.tail()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "And check the results."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "1.247699599245727 radian"
      ],
      "text/latex": [
       "$1.247699599245727\\ \\mathrm{radian}$"
      ],
      "text/plain": [
       "1.247699599245727 <Unit('radian')>"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "theta_final = results.last_row().theta"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Here's the error function we'll use with `root_bisect`.\n",
    "\n",
    "It takes a hypothetical value for `torque_friction` and returns the difference between `theta_final` and the observed duration of the first push, 1.5 radian."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [],
   "source": [
    "def error_func1(torque_friction, params):\n",
    "    \"\"\"Error function for root_scalar.\n",
    "    \n",
    "    torque_friction: hypothetical value\n",
    "    params: Params object\n",
    "    \n",
    "    returns: offset from target value\n",
    "    \"\"\"\n",
    "    force = 1 * N\n",
    "    results = run_two_phases(force, torque_friction, params)\n",
    "    theta_final = results.last_row().theta\n",
    "    print(torque_friction, theta_final)\n",
    "    return theta_final - 1.5 * radian"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Testing the error function."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.1 meter * newton 2.491081016010591 radian\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "0.991081016010591 radian"
      ],
      "text/latex": [
       "$0.991081016010591\\ \\mathrm{radian}$"
      ],
      "text/plain": [
       "0.991081016010591 <Unit('radian')>"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "guess1 = 0.1*N*m\n",
    "error_func1(guess1, params)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.3 meter * newton 0.8319164068661051 radian\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "-0.6680835931338949 radian"
      ],
      "text/latex": [
       "$-0.6680835931338949\\ \\mathrm{radian}$"
      ],
      "text/plain": [
       "-0.6680835931338949 <Unit('radian')>"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "guess2 = 0.3*N*m\n",
    "error_func1(guess2, params)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "And running `root_scalar`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.1 meter * newton 2.491081016010591 radian\n",
      "0.3 meter * newton 0.8319164068661051 radian\n",
      "0.2 meter * newton 1.247699599245727 radian\n",
      "0.15000000000000002 meter * newton 1.664679140408952 radian\n",
      "0.17500000000000002 meter * newton 1.4245119372074873 radian\n",
      "0.16250000000000003 meter * newton 1.5351133644066652 radian\n",
      "0.16875 meter * newton 1.4775125382367449 radian\n",
      "0.16562500000000002 meter * newton 1.5057134910749645 radian\n",
      "0.16718750000000002 meter * newton 1.4913395920086545 radian\n",
      "0.16640625000000003 meter * newton 1.4984572231242101 radian\n",
      "0.16601562500000003 meter * newton 1.502067905168568 radian\n",
      "0.16621093750000004 meter * newton 1.5002582165443015 radian\n",
      "0.16630859375000004 meter * newton 1.4993566348484146 radian\n",
      "0.16625976562500006 meter * newton 1.4998071542109142 radian\n",
      "0.16623535156250005 meter * newton 1.500032617476343 radian\n",
      "0.16624755859375007 meter * newton 1.499919868872052 radian\n",
      "0.16624145507812504 meter * newton 1.4999762389308366 radian\n",
      "0.16623840332031253 meter * newton 1.5000044271426904 radian\n",
      "0.1662399291992188 meter * newton 1.4999903327715458 radian\n",
      "0.16623916625976565 meter * newton 1.499997379890813 radian\n",
      "0.1662387847900391 meter * newton 1.5000009035001758 radian\n",
      "0.16623897552490235 meter * newton 1.4999991416913503 radian\n",
      "0.16623888015747074 meter * newton 1.5000000225947272 radian\n",
      "0.16623892784118655 meter * newton 1.4999995821427796 radian\n",
      "0.16623890399932864 meter * newton 1.4999998023686882 radian\n",
      "0.1662388920783997 meter * newton 1.4999999124816914 radian\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>values</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>converged</th>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>root</th>\n",
       "      <td>0.16623888611793522 meter * newton</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "converged                                  True\n",
       "root         0.16623888611793522 meter * newton\n",
       "dtype: object"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "res = root_bisect(error_func1, [guess1, guess2], params)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The result is the coefficient of friction that yields a total rotation of 1.5 radian."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "0.16623888611793522 meter newton"
      ],
      "text/latex": [
       "$0.16623888611793522\\ \\mathrm{meter} \\cdot \\mathrm{newton}$"
      ],
      "text/plain": [
       "0.16623888611793522 <Unit('meter * newton')>"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "torque_friction = res.root"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Here's a test run with the estimated value."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "1.4999999675382056 radian"
      ],
      "text/latex": [
       "$1.4999999675382056\\ \\mathrm{radian}$"
      ],
      "text/plain": [
       "1.4999999675382056 <Unit('radian')>"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "force = 1 * N\n",
    "results = run_two_phases(force, torque_friction, params)\n",
    "theta_final = get_last_value(results.theta)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Looks good."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Animation\n",
    "\n",
    "\n",
    "Here's a draw function we can use to animate the results."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [],
   "source": [
    "from matplotlib.patches import Circle\n",
    "from matplotlib.patches import Arrow\n",
    "\n",
    "def draw_func(state, t):\n",
    "    theta, omega = state\n",
    "    \n",
    "    # draw a circle for the table\n",
    "    radius_disk = magnitude(params.radius_disk)\n",
    "    circle1 = Circle([0, 0], radius_disk)\n",
    "    plt.gca().add_patch(circle1)\n",
    "    \n",
    "    # draw a circle for the teapot\n",
    "    radius_pot = magnitude(params.radius_pot)\n",
    "    center = pol2cart(theta, radius_pot)\n",
    "    circle2 = Circle(center, 0.05, color='C1')\n",
    "    plt.gca().add_patch(circle2)\n",
    "\n",
    "    # make the aspect ratio 1\n",
    "    plt.axis('equal')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "state = results.first_row()\n",
    "draw_func(state, 0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "animate(results, draw_func)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "### Exercises\n",
    "\n",
    "Now finish off the example by estimating the force that delivers the teapot to the desired position.\n",
    "\n",
    "Write an error function that takes `force` and `params` and returns the offset from the desired angle."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Solution\n",
    "\n",
    "def error_func2(force, params):\n",
    "    \"\"\"Error function for root_scalar.\n",
    "    \n",
    "    force: hypothetical value\n",
    "    params: Params object\n",
    "    \n",
    "    returns: offset from target value\n",
    "    \"\"\"\n",
    "    # notice that this function uses the global value of torque_friction\n",
    "    results = run_two_phases(force, torque_friction, params)\n",
    "    theta_final = get_last_value(results.theta)\n",
    "    print(force, theta_final)\n",
    "    remaining_angle = np.pi - 1.5\n",
    "    return theta_final - remaining_angle * radian"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Test the error function with `force=1`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.5 newton 0.7508796257362771 radian\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "-0.890713027853516 radian"
      ],
      "text/latex": [
       "$-0.890713027853516\\ \\mathrm{radian}$"
      ],
      "text/plain": [
       "-0.890713027853516 <Unit('radian')>"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Solution\n",
    "\n",
    "guess1 = 0.5 * N\n",
    "error_func2(guess1, params)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2 newton 2.990287714114223 radian\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "1.3486950605244297 radian"
      ],
      "text/latex": [
       "$1.3486950605244297\\ \\mathrm{radian}$"
      ],
      "text/plain": [
       "1.3486950605244297 <Unit('radian')>"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Solution\n",
    "\n",
    "guess2 = 2 * N\n",
    "error_func2(guess2, params)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "And run `root_bisect` to find the desired force."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.5 newton 0.7508796257362771 radian\n",
      "2 newton 2.990287714114223 radian\n",
      "1.25 newton 1.8767666580336735 radian\n",
      "0.875 newton 1.314142751543798 radian\n",
      "1.0625 newton 1.5961003377501604 radian\n",
      "1.15625 newton 1.7324316654000937 radian\n",
      "1.109375 newton 1.6640846390801893 radian\n",
      "1.0859375 newton 1.6295935099707282 radian\n",
      "1.09765625 newton 1.6467143299143472 radian\n",
      "1.091796875 newton 1.6381227337897593 radian\n",
      "1.0947265625 newton 1.6424107353138588 radian\n",
      "1.09326171875 newton 1.6402647854172603 radian\n",
      "1.093994140625 newton 1.6413372730819231 radian\n",
      "1.0943603515625 newton 1.6418738823769812 radian\n",
      "1.09417724609375 newton 1.641605547274225 radian\n",
      "1.094085693359375 newton 1.6414714025642667 radian\n",
      "1.0941314697265625 newton 1.641538473015794 radian\n",
      "1.0941543579101562 newton 1.6415720096691466 radian\n",
      "1.0941658020019531 newton 1.6415887783527199 radian\n",
      "1.0941715240478516 newton 1.6415971627837305 radian\n",
      "1.0941686630249023 newton 1.6415929705607897 radian\n",
      "1.0941672325134277 newton 1.641590874454896 radian\n",
      "1.094167947769165 newton 1.6415919225073785 radian\n",
      "1.0941683053970337 newton 1.6415924465339684 radian\n",
      "1.094168484210968 newton 1.6415927085473503 radian\n",
      "1.0941683948040009 newton 1.641592577540652 radian\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>values</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>converged</th>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>root</th>\n",
       "      <td>1.0941684395074844 newton</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "converged                         True\n",
       "root         1.0941684395074844 newton\n",
       "dtype: object"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Solution\n",
    "\n",
    "res = root_bisect(error_func2, [guess1, guess2], params)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "1.6415926430439989 radian"
      ],
      "text/latex": [
       "$1.6415926430439989\\ \\mathrm{radian}$"
      ],
      "text/plain": [
       "1.6415926430439989 <Unit('radian')>"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "force = res.root\n",
    "results = run_two_phases(force, torque_friction, params)\n",
    "theta_final = get_last_value(results.theta)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1.6415926535897931"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "remaining_angle = np.pi - 1.5"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Exercise:** Now suppose my friend pours 0.1 kg of tea and puts the teapot back on the turntable at distance 0.3 meters from the center.  If I ask for the tea back, how much force should they apply, over an arc of 0.5 radians, to make the teapot glide to a stop back in front of me?  You can assume that torque due to friction is proportional to the total mass of the teapot and the turntable."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "7.3 kilogram"
      ],
      "text/latex": [
       "$7.3\\ \\mathrm{kilogram}$"
      ],
      "text/plain": [
       "7.3 <Unit('kilogram')>"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Solution\n",
    "\n",
    "mass_before = params.mass_pot + params.mass_disk"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>values</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>radius_disk</th>\n",
       "      <td>0.5 meter</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mass_disk</th>\n",
       "      <td>7 kilogram</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>radius_pot</th>\n",
       "      <td>0.3 meter</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mass_pot</th>\n",
       "      <td>0.2 kilogram</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>force</th>\n",
       "      <td>1 newton</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>torque_friction</th>\n",
       "      <td>0.2 meter * newton</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>theta_end</th>\n",
       "      <td>0.5 radian</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>t_end</th>\n",
       "      <td>20 second</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "radius_disk                 0.5 meter\n",
       "mass_disk                  7 kilogram\n",
       "radius_pot                  0.3 meter\n",
       "mass_pot                 0.2 kilogram\n",
       "force                        1 newton\n",
       "torque_friction    0.2 meter * newton\n",
       "theta_end                  0.5 radian\n",
       "t_end                       20 second\n",
       "dtype: object"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Solution\n",
    "\n",
    "params2 = Params(params, mass_pot=0.2*kg, radius_pot=0.3*m)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "7.2 kilogram"
      ],
      "text/latex": [
       "$7.2\\ \\mathrm{kilogram}$"
      ],
      "text/plain": [
       "7.2 <Unit('kilogram')>"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Solution\n",
    "\n",
    "mass_after = params2.mass_pot + params2.mass_disk"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "0.16623888611793522 meter newton"
      ],
      "text/latex": [
       "$0.16623888611793522\\ \\mathrm{meter} \\cdot \\mathrm{newton}$"
      ],
      "text/plain": [
       "0.16623888611793522 <Unit('meter * newton')>"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Solution\n",
    "\n",
    "torque_friction"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "0.16396164110262107 meter newton"
      ],
      "text/latex": [
       "$0.16396164110262107\\ \\mathrm{meter} \\cdot \\mathrm{newton}$"
      ],
      "text/plain": [
       "0.16396164110262107 <Unit('meter * newton')>"
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Solution\n",
    "\n",
    "torque_friction2 = torque_friction * mass_after / mass_before"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>theta</th>\n",
       "      <th>omega</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>5.630969</th>\n",
       "      <td>2.9973839879919186 radian</td>\n",
       "      <td>0.12061194274576453 radian / second</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5.830969</th>\n",
       "      <td>3.0178342233248876 radian</td>\n",
       "      <td>0.0838904105839233 radian / second</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6.030969</th>\n",
       "      <td>3.030940152225488 radian</td>\n",
       "      <td>0.04716887842208207 radian / second</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6.230969</th>\n",
       "      <td>3.03670177469372 radian</td>\n",
       "      <td>0.010447346260240839 radian / second</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6.287870</th>\n",
       "      <td>3.036251498073426 radian</td>\n",
       "      <td>0.0 radian / second</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                              theta                                 omega\n",
       "5.630969  2.9973839879919186 radian   0.12061194274576453 radian / second\n",
       "5.830969  3.0178342233248876 radian    0.0838904105839233 radian / second\n",
       "6.030969   3.030940152225488 radian   0.04716887842208207 radian / second\n",
       "6.230969    3.03670177469372 radian  0.010447346260240839 radian / second\n",
       "6.287870   3.036251498073426 radian                   0.0 radian / second"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Solution\n",
    "\n",
    "guess = 2 * N\n",
    "results = run_two_phases(guess, torque_friction2, params2)\n",
    "results.tail()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x576 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Solution\n",
    "\n",
    "subplot(2, 1, 1)\n",
    "plot_theta(results)\n",
    "subplot(2, 1, 2)\n",
    "plot_omega(results)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Solution\n",
    "\n",
    "# Note: this is so similar to error_func2, it would be better\n",
    "# to generalize it, but for expediency, I will make a modified\n",
    "# verison.\n",
    "\n",
    "def error_func3(force, params):\n",
    "    \"\"\"Error function for root_scalar.\n",
    "    \n",
    "    force: hypothetical value\n",
    "    params: Params object\n",
    "    \n",
    "    returns: offset from target value\n",
    "    \"\"\"\n",
    "    # notice that this function uses the global value of torque_friction2\n",
    "    results = run_two_phases(force, torque_friction2, params)\n",
    "    theta_final = get_last_value(results.theta)\n",
    "    print(force, theta_final)\n",
    "    remaining_angle = np.pi * radian\n",
    "    return theta_final - remaining_angle"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1 newton 1.521633703251964 radian\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "-1.619958950337829 radian"
      ],
      "text/latex": [
       "$-1.619958950337829\\ \\mathrm{radian}$"
      ],
      "text/plain": [
       "-1.619958950337829 <Unit('radian')>"
      ]
     },
     "execution_count": 50,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Solution\n",
    "\n",
    "guess1 = 1 * N\n",
    "error_func3(guess1, params)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3 newton 4.544952149083414 radian\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "1.4033594954936213 radian"
      ],
      "text/latex": [
       "$1.4033594954936213\\ \\mathrm{radian}$"
      ],
      "text/plain": [
       "1.4033594954936213 <Unit('radian')>"
      ]
     },
     "execution_count": 51,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Solution\n",
    "\n",
    "guess2 = 3 * N\n",
    "error_func3(guess2, params)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1 newton 1.5220674118848017 radian\n",
      "3 newton 4.555863285616827 radian\n",
      "2.0 newton 3.036251498073426 radian\n",
      "2.5 newton 3.7711230348952873 radian\n",
      "2.25 newton 3.410270734411078 radian\n",
      "2.125 newton 3.237449910464716 radian\n",
      "2.0625 newton 3.137756144960873 radian\n",
      "2.09375 newton 3.189525229335694 radian\n",
      "2.078125 newton 3.1637524234581544 radian\n",
      "2.0703125 newton 3.1507232783707426 radian\n",
      "2.06640625 newton 3.144231960206115 radian\n",
      "2.064453125 newton 3.1409921147185713 radian\n",
      "2.0654296875 newton 3.142611552996112 radian\n",
      "2.06494140625 newton 3.141801712740783 radian\n",
      "2.064697265625 newton 3.1413968834505375 radian\n",
      "2.0648193359375 newton 3.1415992905258765 radian\n",
      "2.06475830078125 newton 3.141498085095761 radian\n",
      "2.064788818359375 newton 3.1415486873377074 radian\n",
      "2.0648040771484375 newton 3.1415739888135135 radian\n",
      "2.0648117065429688 newton 3.141586639640125 radian\n",
      "2.0648155212402344 newton 3.1415929650756085 radian\n",
      "2.0648136138916016 newton 3.1415898023560187 radian\n",
      "2.064814567565918 newton 3.1415913837153515 radian\n",
      "2.064815044403076 newton 3.141592174395364 radian\n",
      "2.0648152828216553 newton 3.1415925697354568 radian\n",
      "2.064815402030945 newton 3.141592767405525 radian\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>values</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>converged</th>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>root</th>\n",
       "      <td>2.0648153424263 newton</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "converged                      True\n",
       "root         2.0648153424263 newton\n",
       "dtype: object"
      ]
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Solution\n",
    "\n",
    "res = root_bisect(error_func3, [guess1, guess2], params2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2.0648153424263 newton 3.135475479073576 radian\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "-0.006117174516217183 radian"
      ],
      "text/latex": [
       "$-0.006117174516217183\\ \\mathrm{radian}$"
      ],
      "text/plain": [
       "-0.006117174516217183 <Unit('radian')>"
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Solution\n",
    "\n",
    "error_func3(res.root, params)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
